Virtualization allows multiplexing of the underlying host machine between different virtual machines. The host computer allocates a certain amount of its resources to each of the virtual machines. Each virtual machine is then able to use the allocated resources to execute applications, including operating systems (referred to as guest operating systems). The software layer providing the virtualization is commonly referred to as a hypervisor and is also known as a virtual machine monitor (VMM), a kernel-based hypervisor or a host operating system. The hypervisor emulates the underlying hardware of the host computer, making the use of the virtual machine transparent to the guest operating system and the user of the computer.
A host computer can accommodate more virtual machines than the size of its physical memory allows. Using virtual memory techniques, the host computer can give each virtual machine the impression that it has a contiguous address space, while in fact the memory used by the virtual machine may be physically fragmented and even overflow to disk storage. Conventionally, when a virtual central processing unit (virtual CPU) in a virtual machine requests a page that is not present in the host computer memory, the entire virtual CPU is blocked by the page fault handler in the host operating system until the requested page is brought into the memory. The blocking of the virtual CPU can result in large latencies and unnecessary waste of system resources.